package com.ruoyi.basebill.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.basebill.DTO.NzjclEntryInfo;
import com.ruoyi.basebill.DTO.NzjclInfo;
import com.ruoyi.basebill.domain.WfzNzjff;
import com.ruoyi.basebill.domain.WfzNzjffentry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.basebill.domain.WfzNzjftentry;
import com.ruoyi.basebill.mapper.WfzNzjftMapper;
import com.ruoyi.basebill.domain.WfzNzjft;
import com.ruoyi.basebill.service.IWfzNzjftService;

/**
 * 年终奖分摊Service业务层处理
 * 
 * @author xiefeng
 * @date 2022-12-12
 */
@Service
public class WfzNzjftServiceImpl implements IWfzNzjftService 
{
    @Autowired
    private WfzNzjftMapper wfzNzjftMapper;

    /**
     * 查询年终奖分摊
     * 
     * @param fid 年终奖分摊主键
     * @return 年终奖分摊
     */
    @Override
    public WfzNzjft selectWfzNzjftByFid(Long fid)
    {
        return wfzNzjftMapper.selectWfzNzjftByFid(fid);
    }

    /**
     * 查询年终奖分摊列表
     * 
     * @param wfzNzjft 年终奖分摊
     * @return 年终奖分摊
     */
    @Override
    public List<WfzNzjft> selectWfzNzjftList(WfzNzjft wfzNzjft)
    {
        return wfzNzjftMapper.selectWfzNzjftList(wfzNzjft);
    }

    /**
     * 新增年终奖分摊
     * 
     * @param wfzNzjft 年终奖分摊
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWfzNzjft(WfzNzjft wfzNzjft)
    {
        int rows = wfzNzjftMapper.insertWfzNzjft(wfzNzjft);
        insertWfzNzjftentry(wfzNzjft);
        return rows;
    }

    /**
     * 修改年终奖分摊
     * 
     * @param wfzNzjft 年终奖分摊
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWfzNzjft(WfzNzjft wfzNzjft)
    {
        wfzNzjftMapper.deleteWfzNzjftentryByFparentid(wfzNzjft.getFid());
        insertWfzNzjftentry(wfzNzjft);
        return wfzNzjftMapper.updateWfzNzjft(wfzNzjft);
    }

    /**
     * 批量删除年终奖分摊
     * 
     * @param fids 需要删除的年终奖分摊主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzNzjftByFids(Long[] fids)
    {
        wfzNzjftMapper.deleteWfzNzjftentryByFparentids(fids);
        return wfzNzjftMapper.deleteWfzNzjftByFids(fids);
    }

    /**
     * 删除年终奖分摊信息
     * 
     * @param fid 年终奖分摊主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzNzjftByFid(Long fid)
    {
        wfzNzjftMapper.deleteWfzNzjftentryByFparentid(fid);
        return wfzNzjftMapper.deleteWfzNzjftByFid(fid);
    }

    @Override
    public String importNzjft(WfzNzjft wfzNzjft) {
        NzjclInfo nzjftInfo = new NzjclInfo();
        String fnumber = wfzNzjft.getFnumber(); //单据编码
        String fcompany = wfzNzjft.getFcompany(); //公司
        String fperiod = wfzNzjft.getFperiod();//薪酬期间
        BigDecimal fzrs = wfzNzjft.getFzrs();//总人数
        BigDecimal fnscbzxrs = wfzNzjft.getFnscbzxrs();//合并纳税成本中心人数
        BigDecimal fglf = wfzNzjft.getFglf();//关联方人数
        String fvourtype = wfzNzjft.getFvourtype(); //凭证字


        nzjftInfo.setNumber(fnumber);
        nzjftInfo.setCompany(fcompany);
        nzjftInfo.setPeriod(fperiod);
        nzjftInfo.setZrs(fzrs);
        nzjftInfo.setNscbzxrs(fnscbzxrs);
        nzjftInfo.setGlf(fglf);
        nzjftInfo.setVourType(fvourtype);
        nzjftInfo.setSourcebillid(String.valueOf(wfzNzjft.getFid()));

        List<WfzNzjftentry> wfzNzjftentryList = wfzNzjft.getWfzNzjftentryList();
        ArrayList<NzjclEntryInfo> entry = new ArrayList<>();
        //组装分录数据
        for (int j=0;j<wfzNzjftentryList.size();j++){
            WfzNzjftentry wfzNzjftentry = wfzNzjftentryList.get(j);
            String fcostnumber = wfzNzjftentry.getFcostnumber();//成本中心
            BigDecimal fnzj = wfzNzjftentry.getFnzj();//年终奖
            String fcostcompany = wfzNzjftentry.getFcostcompany();//成本中心所属财务组织
            String fjzcompany = wfzNzjftentry.getFjzcompany();//记账公司
            String fjsfs = wfzNzjftentry.getFjsfs();//组织间结算方式
            String fcbzxxz = wfzNzjftentry.getFcbzxxz();//成本中心属性
            String fvourtype1 = wfzNzjftentry.getFvourtype();//凭证字

            NzjclEntryInfo nzjftEntryInfo = new NzjclEntryInfo();
            nzjftEntryInfo.setCostCenter(fcostnumber);
            nzjftEntryInfo.setNzj(fnzj);
            nzjftEntryInfo.setCostcompany(fcostcompany);
            nzjftEntryInfo.setJzcompany(fjzcompany);
            nzjftEntryInfo.setJsfs(fjsfs);
            nzjftEntryInfo.setCbzxxz(fcbzxxz);
            nzjftEntryInfo.setVourType(fvourtype1);


            entry.add(nzjftEntryInfo);

        }

        nzjftInfo.setEntry(entry);


        //转化为json
        String json = JSONObject.toJSONString(nzjftInfo);

        return json;
    }

    /**
     * 新增年终奖分摊分录信息
     * 
     * @param wfzNzjft 年终奖分摊对象
     */
    public void insertWfzNzjftentry(WfzNzjft wfzNzjft)
    {
        List<WfzNzjftentry> wfzNzjftentryList = wfzNzjft.getWfzNzjftentryList();
        Long fid = wfzNzjft.getFid();
        if (StringUtils.isNotNull(wfzNzjftentryList))
        {
            List<WfzNzjftentry> list = new ArrayList<WfzNzjftentry>();
            for (WfzNzjftentry wfzNzjftentry : wfzNzjftentryList)
            {
                wfzNzjftentry.setFparentid(fid);
                list.add(wfzNzjftentry);
            }
            if (list.size() > 0)
            {
                wfzNzjftMapper.batchWfzNzjftentry(list);
            }
        }
    }
}
